﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Libreria.DAL;

namespace Libreria.RFID.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer)]
    public class Titulado
    {
        // Atributo de abstracción
        private MOR accesoADatos;

        private Int32? identificador;
        private Int32? ficha;
        private Int32? codigoVersion;
        private String coordinador;
        private DateTime fechaIniciacion;
        private DateTime fechaFinalizacion;

        // Constructor de la clase
        public Titulado()
        {
        }

        public Titulado(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

        //Encapsulamiento y mapeo de atributos
        [Tipo(Tipo.TiposSQLServer._int,"codigoTitulado", true, true)]
        public Int32? Identificador
        {
            get { return identificador; }
            set { identificador = value; }
        }
        [Tipo(Tipo.TiposSQLServer._int,"ficha")]
        public Int32? Ficha
        {
            get { return ficha; }
            set { ficha = value; }
        }

        [Tipo(Tipo.TiposSQLServer._varchar,"coordinador")]
        public String Coordinador
        {
            get { return coordinador; }
            set { coordinador = value; }
        }


        [Tipo(Tipo.TiposSQLServer._int, "codigoVersion")]
        public Int32? CodigoVersion
        {
            get { return codigoVersion; }
            set { codigoVersion = value; }
        }

        [Tipo(Tipo.TiposSQLServer._datetime, "fechaInicia")]
        public DateTime FechaIniciacion
        {
            get { return fechaIniciacion; }
            set { fechaIniciacion = value; }
        }

        [Tipo(Tipo.TiposSQLServer._datetime, "fechaFinaliza")]
        public DateTime FechaFinalizacion
        {
            get { return fechaFinalizacion; }
            set { fechaFinalizacion = value; }
        }



        // Métodos de abstracción de datos
        public void crear()
        {
            this.Identificador = this.accesoADatos.crearRegistro(this);
        }

        public List<Titulado> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<Titulado> resultado = new List<Titulado>();
            foreach (Object registro in registros)
            {
                resultado.Add((Titulado)registro);
            }
            return resultado;
        }

        public Titulado consultarPorCodigo(Int32 identificador)
        {
            this.Identificador = identificador;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            Titulado resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (Titulado)registros[0];
                }
            }
            return resultado;
        }

        public void actualizar()
        {
            this.accesoADatos.actualizarRegistro(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }

    }
}
